package com.stock;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Client {
	
	private static HttpClient httpClient = new DefaultHttpClient();
	
	private static final String cookie="s=216z17dicr; bid=5d51c1574b296d47870b673ee4fbe9b2_ihaifgyz; __utmt=1; xq_a_token=59ae43091c6531763cd8db2207dadee3a95958f0; xq_r_token=15824ec91731dbcc37b362acdfc9f5f3fed49108; __utma=1.1811541425.1448115448.1450970986.1450975325.12; __utmb=1.3.10.1450975325; __utmc=1; __utmz=1.1448115448.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); Hm_lvt_1db88642e346389874251b5a1eded6e3=1450804378,1450851661,1450970986,1450975326; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1450975346";
	
	private static final int retryCount=10;

	/**
	 * 发送Get请求
	 * @param url
	 * @return
	 */
	public static String doGet(String url) {
		String body = null;
		for(int i=0;i<retryCount;i++){
			try {
				// Get请求
				HttpGet httpget = new HttpGet(url);
				// 设置参数
//				String str = EntityUtils.toString(new UrlEncodedFormEntity(params));
//				httpget.setURI(new URI(httpget.getURI().toString() + "?" + str));
				httpget.addHeader("Cookie",cookie);
				// 发送请求
				HttpResponse httpresponse = httpClient.execute(httpget);
				// 获取返回数据
				HttpEntity entity = httpresponse.getEntity();
				body = EntityUtils.toString(entity);
				if (entity != null) {
					entity.consumeContent();
				}
				break;
			} catch (Exception e) {
				System.err.println(e.getCause());
				try {
					Thread.sleep(5000);
				} catch (InterruptedException e1) {
					e1.printStackTrace();
				}
				System.err.println("retry :"+i);
				continue;
			} 
		}
		return body;
	}

	/**
	 * 发送 Post请求
	 * @param url
	 * @param reqXml
	 * @return
	 */
	public static String doPost(String url, String reqXml) {
		String body = null;
		try {
			//设置客户端编码
			if (httpClient == null) {
				// Create HttpClient Object
				httpClient = new DefaultHttpClient();
				}
			httpClient.getParams().setParameter("http.protocol.content-charset",HTTP.UTF_8);
			httpClient.getParams().setParameter(HTTP.CONTENT_ENCODING, HTTP.UTF_8);
			httpClient.getParams().setParameter(HTTP.CHARSET_PARAM, HTTP.UTF_8);
			httpClient.getParams().setParameter(HTTP.DEFAULT_PROTOCOL_CHARSET,HTTP.UTF_8);
			// Post请求
			HttpPost httppost = new HttpPost(url);
			//设置post编码
			httppost.getParams().setParameter("http.protocol.content-charset",HTTP.UTF_8);
			httppost.getParams().setParameter(HTTP.CONTENT_ENCODING, HTTP.UTF_8);
			httppost.getParams().setParameter(HTTP.CHARSET_PARAM, HTTP.UTF_8);
			httppost.getParams().setParameter(HTTP.DEFAULT_PROTOCOL_CHARSET, HTTP.UTF_8);
	
			// 设置参数
			 List<NameValuePair> params = new ArrayList<NameValuePair>();
			 params.add(new BasicNameValuePair("$xmldata", reqXml));
			 httppost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 
//			StringEntity entity1 = new StringEntity(getUTF8XMLString(reqXml), "UTF-8");
//			entity1.setContentType("text/xml;charset=UTF-8");
//			entity1.setContentEncoding("UTF-8");
//			httppost.setEntity(entity1);
			//设置报文头
			httppost.setHeader("Content-Type", "text/xml;charset=UTF-8");
			// 发送请求
			HttpResponse httpresponse = httpClient.execute(httppost);
			// 获取返回数据
			HttpEntity entity = httpresponse.getEntity();
			body = EntityUtils.toString(entity);
			if (entity != null) {
				entity.consumeContent();
			}
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return body;
	}
	/**
	 * 根据样式格式化时间
	 * "yyyyMMdd"
	 * "yyyyMMddHHmmss"
	 * "yyyyMMddHHmmssssssss"
	 * @param dateFormat
	 * @return
	 */
	public static String getnowDate(String dateFormat)
 	{
 		SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); 
 		return sdf.format(new Date());
 	}
	public static void main(String[] args) {
		String url="http://xueqiu.com/stock/forchart/stocklist.json?symbol=SZ002657&period=all&_=1448113830380";
//		String url="http://xueqiu.com/stock/forchartk/stocklist.json?symbol=SZ002657&period=1day&type=normal&begin=1416576126247&end=1448112126247&_=1448112126248";
		String response=Client.doGet(url);
		System.out.println(response);
	}

}
